/*
 * Paquete para calcular las notas que provienen de un Examen
 * que tiene pruebas y cada sprueba tiene secciones.
 */
package pio.action.administrador.inscripcion.utils;

/**
 * @param title nombre de la seccion del test
 * @param value escala de la seccion ejemplo Sobre 40 puntos
 * @param percentage porcentaje o peso de la seccion del examen
 * @author linda perez
 */
public class Section {
private String title=null;
private int value;
private int percentage=100;

    /**
    * @param title nombre de la seccion del test
    * @param value escala de la seccion ejemplo Sobre 40 puntos
    * @param percentage porcentaje o peso de la seccion del examen
    * @return the title
     */
    public  Section( String title, int value, int percentage) {
        this.title=title;
        this.value=value;
        this.percentage=percentage;
    }   


    /**
     * @return the title
     */
    public String getTitle() {
        return title;
    }

    /**
     * @param title the title to 
     */
    public void setTitle(String title) {
        this.title = title;
    }


    /**
     * @return the percentage
     */
    public int getPercentage() {
        return percentage;
    }

    /**
     * Se verifica al setear el porcetaje que este no sea negativo o mayor
     * a 100
     * @param percentage the percentage to set
     */
    public void setPercentage(int percentage) {
        percentage=verifNeg(percentage);
        if(percentage>100){
            System.out.println("Error: No puede ingresar un porcentaje de seccion"
                    + " mayor a"+this.percentage);
            System.exit(-1);   
        }
        this.percentage = percentage;
    }

    
    /**
     * Se calcula la nota con respecto al porcentaje ingresado
     * Se verifica que la nota no exceda el rango y la escala
     * no sea negativa Ej. (Calificacion*Escala)/NumPreguntas
     * (rate*scale)/value
     * @param rate nota del alumno
     * @param scale escala para hacer el calculo de la calificacion
     * @return the title
     */
    public int calculateScale(int rate, int scale) {
        rate=verifyRate(rate);
        scale=verifNeg(scale);
        return ((rate*scale)/this.value);
    }
  
    /**
     * Se verifica que la nota se encuentre en el intervalo valor
     * es decir, dentro de la escala
     * @return the title
     */
    public int verifyRate(int rate) {
        if(verifNeg(rate)>this.value){
            System.out.print("Error: No puede ingresar valores mayores al"
                    + " valor del numero de preguntas ("+this.value+")");
            System.exit(-1);   
        }
        
        return rate;
    }


    /**
     * @return the value
     */
    public int getValue() {
        return value;
    }

    /**
     * @param value the value to set
     */
    public void setValue(int value) {
   
        this.value = value;
    }
    
    /**
     * Se verifica que el entero no sea negativo
     * @param num 
     * @return num -1 si ocurrio un error o num en caso de que no
     */
    public int verifNeg(int num) {
         if(num<0){
            System.out.print("Error: No puede ingresar valores negativos");
            System.exit(-1);
            return -1;
        }
         return num;
    }
    
    /** 
     * Se verifica que el porcentaje de la seccion se halle dentro del 
     * porcentaje incresado
     * @param percent el valor para comparar
     * @return -1 si ocurre un error el porcentaje de la seccion sino.
     */
    
    public int verifyPer(int percent) {
        if(this.percentage>percent){
        System.out.println("No debe ingresar un % mayor a "+percent);
        System.exit(-1);
        }  
        return this.percentage;
    }
}
